# -*- coding: utf-8 -*-

import sys

sys.path.append('/usr/local/lib/python3.5/dist-packages/')
sys.path.append('/usr/lib/python3/dist-packages')

from multiprocessing import Pool
from pymongo import MongoClient
from selenium import webdriver
from bs4 import UnicodeDammit
from bs4 import BeautifulSoup
from urllib import request
from urllib import parse
# from aip import AipNlp

import numpy as np
import requests
import datetime
import pymongo
import random
import pprint
import time
import ssl
import os
import re

APP_ID = '10547196'
API_KEY = 'deUIOGmUU1bCiEtrfhjRAf9C'
SECRET_KEY = 'tKZwzf78eQQ5RLx8WszbAt8l9SVp1MTD'

ssl._create_default_https_context = ssl._create_unverified_context

# chrome_options = webdriver.ChromeOptions()
# chrome_options.add_argument('--headless')
# chrome_options.add_argument('--disable-gpu')
# EXECUTE_PATH  = '/Users/xuchaosheng/Workspace/KNX/libs/chromedriver'
# driver = webdriver.Chrome(chrome_options = chrome_options, executable_path = EXECUTE_PATH)

client = MongoClient('47.104.130.19', 27017)

keywords = {
    "金融行业": {
        "证券": {
            'relative': [
                "证券经纪人", '证券助理', '股票分析师', '证券投资顾问', '证券事务代表', '证券理财顾问', '证券市场总监', '证券分析讲师', '证券研究员',
                '外汇经纪人', '期货经纪人', "证券代表", "证券分析", '投资服务', '金融操盘手', '证券市场专员', '证券事务助理', '证券客户经理',
                '金融交易员', '外汇分析', '短线交易员', '期货居间人', '黄金交易员', '证券分析师', '证券实习', '证券从业资格讲师', '证券投资管理',
                '证券经理', '金融产品经理', '基金项目经理', '理财顾问', '证券理财经理'
            ],
            'industrytype': ['03'],
            'industrytype4zhilian': ['180000'],
            'funtype': ['3300'],
            'industrytype4lagou': ['金融'],
            'industrytype4yingcai': ['1102,11027'],
            'funtype4zhilian': ['2070000']
        },
        "银行": {
            'relative': [
                '银行柜员', '银行项目客服', '客户经理', '银行信贷专员', '银行金融服务专员', '银行后台服务', '信用卡客户经理',
                '银行客户专员', '银行文员', '银行客户服务代表', '银行贷款专员', '信用卡业务代表', '银行经理', '信审核查', '银行客服代表',
                '银行大堂助理', '银行渠道专员', '银行渠道业务经理', '银行投资顾问', '银行信贷员', '银行信托理财经理', '银行客户维护专员',
                '银行信贷主管', '银行大堂经理', '风控主管', '大客户经理', '审批专员', '银行外汇交易', '贷款业务', '贷款审查', '综合柜员',
                '稽核', '风险专员', '支付结算', '信用卡专员', '理财顾问', '信用卡催收', '小微客户经理', '柜面复核',
                '风险督查', '运营经理', '投资顾问'
            ],
            'industrytype': ['42'],
            'industrytype4zhilian': ['300500'],
            'funtype': ['2200'],
            'industrytype4lagou': ['金融'],
            'industrytype4yingcai': ['1102,11028'],
            'funtype4zhilian': ['2071000']
        }
    },
    "快消房产行业": {
        "客服": {
            'relative': [
                '客服', '呼叫中心坐席代表', '销售客服', '客服专员', '客服经理', '客服总监', '客户服务', '高级客服', '续约客服', '推广客服',
                '电话客服', '产品客服', '网络客服', '淘宝客服', '房产客服', '售后客服', 'IT客服岗', '呼入客服', '粤英双语客服', '外企英文客服',
                '国际客服', '外呼客服', '英文客服', '呼叫中心客服'
            ],
            'industrytype': ['05', '26'],
            'industrytype4zhilian': ['140000', '120400'],
            'funtype': ['3200'],
            'industrytype4lagou': [],
            'industrytype4yingcai': ['1104', '1111'],
            'funtype4zhilian': ['4000000']
        },
        "销售": {
            'relative': [
                '销售', '销售助理', '销售代表', '销售管培生', '大客户销售', '销售储干', '市场营销', '销售顾问', '销售管理', '销售主管', '销售总监',
                '销售跟单', '电话销售', '大区经理', '区域销售',
                '网络销售', '销售精英', '业务顾问', '业务员', '导购员', '品牌营销', '渠道管理',
                '奢侈品销售', '业务代表', '销售支持', '渠道经理', '市场总监', '营销策划', '市场部经理', '市场调研', '市场推广', '市场策划', '市场专员',
                '市场助理', '市场经理', '市场营销', '业务经理'
            ],
            'industrytype': ['05', '26'],
            'industrytype4zhilian': ['140000', '120400'],
            'industrytype4lagou': [],
            'industrytype4yingcai': ['1104', '1111'],
            'funtype': ['0200'],
            'funtype4zhilian': ['7001000']
        }
    },
    "IT互联科技行业": {
        "产品": {
            'relative': [
                '产品助理', '产品经理', '移动端产品', '数据产品', '电商产品', '用户研究', '产品总监', '产品VP', '产品运营', '产品专员',
                '产品主管', '产品部助理', '产品需求专员', '产品设计'
            ],
            'industrytype': ['32', '40', '01'],
            'industrytype4zhilian': ['210500', '160400'],
            'funtype': ['0100', '2500'],
            'industrytype4lagou': [],
            'industrytype4yingcai': ['1100'],
            'funtype4zhilian': ['160200']
        },
        "技术": {
            'relative': [
                '前端开发', 'HTML5', 'Java开发工程师', 'python', 'PHP', '.NET', 'C#', 'C/C++', 'Delphi', 'Perl', 'Ruby',
                'Node.js', 'ERP技术开发', 'Golang', 'Linux研发', 'Windows研发', '游戏开发', '软件研发', 'Android', 'IOS', 'U3D', 'COCOS2DX',
                'APP研发', '测试工程师', '软件测试', '移动端测试', '自动化测试', '自然语言处理', '数据挖掘工程师', '区块链工程师', '图像识别', '机器学习',
                '大数据工程师', '测试开发', '硬件测试', '数据科学家', '运维工程师', '运维开发工程师', '技术支持工程师', '软件技术支持', 'ERP实施顾问',
                '网络工程师', '系统工程师', '系统安全', '数据库管理员', '数据通信', '技术经理', '技术总监', '架构师', '大数据技术经理', '数据架构师',
                '算法经理', '算法工程师', '运维总监', '技术VP', 'CTO', 'BI工程师', 'Hadoop', 'Spark', 'AI研发工程师', '人脸识别', '深度学习工程师',
                '数据建模', '爬虫工程师', '数据分析', '推荐算法工程师', 'NLP', '首席科学家', '语音识别', '自动驾驶'
            ],
            'industrytype': ['01', '38', '32', '40'],
            'industrytype4zhilian': ['210500', '160400', '160000'],
            'industrytype4lagou': [],
            'industrytype4yingcai': ['1100'],
            'funtype': ['0100', '2500'],
            'funtype4zhilian': ['160000']
        }
    },
    "咨询行业": {
        "会计": {
            'relative': [
                '会计', '注册会计师', '助理会计', '核算会计', '成本会计', '财务会计', '出纳会计', '出纳', '财务', '财务经理', '会计主管', '财务总监', '财务顾问', '财务专员', '财务主管', '财务助理'
            ],
            'industrytype': [],
            'industrytype4zhilian': [],
            'industrytype4lagou': [],
            'industrytype4yingcai': [],
            'funtype': ['0400'],
            'funtype4zhilian': ['2060000']
        },
        "教育": {
            'relative': [
                '教师', '助教', '培训师', '在线教育', '辅导老师', '大学教师/教授', '高中教师', '初中教师', '小学教师', '幼儿教师', '理科教师', '文科教师',
                '英语教师', '体育教师', '美术教师', '音乐教师', '教务管理人员', '校长', '教育产品开发', '培训助理/助教', '培训师/讲师', '培训策划',
                'IT培训', '招生/课程顾问', '兴趣培训', '培训督导', '产品培训', '教育专员', '教育规划', '辅导员', '教育咨询', '教育设计', '教育顾问',
                '教育培训总监', '讲师', '销售培训', '教育导师', '教育产品策划'
            ],
            'industrytype': ['23'],
            'industrytype4zhilian': ['201100'],
            'funtype': ['5700', '1200'],
            'industrytype4lagou': ['教育'],
            'industrytype4yingcai': ['1109'],
            'funtype4zhilian': ['2090000']
        },
        "法律": {
            'relative': [
                '法律文案', '法律翻译', '法律管理', '法务助理',
                '法务', '法务专员', '法务经理/主管',
                '律师助理', '律师', '法律顾问',
                '知识产权', '合规专员', '法务总监',
                '法务实习生', '法务主管', '法务担当', '版权助理',
                '合规助理', '合同法务', '专利主管', '商标代理'
            ],
            'industrytype': [],
            'industrytype4zhilian': [],
            'industrytype4lagou': [],
            'industrytype4yingcai': [],
            'funtype': ['1100'],
            'funtype4zhilian': ['2080000']
        }
    },
    "制造行业": {
        "汽车": {
            'relative': [
                '汽车设计', '汽车模具设计', '汽车燃油设计', '汽车电子工程师', '汽车电子技术', '汽车动力系统', '汽车底盘/总装', '汽车装配',
                '汽车安全性能', '汽车维修/保养', '汽车装饰/美容', '汽车零配件', '汽车机构工程师', '发动机工程师', '总装/工程师', '动力总成工程师',
                '底盘工程师', '汽车项目管理', '汽车质量管理', '电气工程师', '车身/造型设计', '新能源电池工程师', '新能源点击工程师', '汽车线束工程师',
                '汽车空调工程师', '汽车电子软件开发', '汽车零件设计', '机械设计工程师', '汽车试验', '汽车研发'
            ],
            'industrytype': ['33'],
            'industrytype4zhilian': ['121000'],
            'funtype': ['5400'],
            'industrytype4lagou': [],
            'industrytype4yingcai': ['1105'],
            'funtype4zhilian': ['7003000']
        },
        "医药": {
            'relative': [
                '医生', '医药技术研发', '生物工程', '生物医药', '微生物检验', '分子生物学', '生物医学工程师', '生物制药', '药品生产', '药理学', '药物制剂',
                '药品化学分析', '医疗器械生产研发', '临床研究员', '临床数据分析员', '实验室技术员', '配料员', '放射科', '中医医师', '护士', '麻醉师',
                '护理', '有机合成研究员', '临床医学', '康复治疗', '药物安全', '动物实验', '药物质量分析', 'QA质量管理', '药剂师', '新药研发', '医生助理',
                '助理医生', '宠物医生'
            ],
            'industrytype': ['08', '46', '47'],
            'industrytype4zhilian': ['121300'],
            'funtype': ['4100', '1300'],
            'industrytype4lagou': ['医疗健康'],
            'industrytype4yingcai': ['1107'],
            'funtype4zhilian': ['2051000']
        },
        "化工": {
            'relative': [
                '化工工程师', '实验室技术员', '涂料研发', '配色技术员', '塑料工程师', '化妆品研发', '化学分析', '食品工程', '化学检测员',
                '化学技术支持', '医药化学分析', '化学实验员', '化学合成', '环境化学检测', '化学工艺工程师', '品控化学师', '化学研发助理',
                '实验室分析员', '化学工艺工程师', '喷涂技术员', '化学师', '质量分析员', '产品工程师', '技术主管', '研发工程师', '调色工程师',
                '纳米材料', '材料工程师', '工程师助手', '检测员', '化验员'
            ],
            'industrytype': ['19', '16', '61'],
            'industrytype4zhilian': ['130000', '120500'],
            'funtype': ['5500'],
            'industrytype4lagou': [],
            'industrytype4yingcai': ['1106'],
            'funtype4zhilian': ['120500']
        }
    }
}


# 语义匹配
def semantic_matching(sent0, sent1):
    return False


# 读取城市列表
def get_city_list():
    with open('hot_city.txt', 'r') as f:
        return f.readlines()


# 读取岗位列表
def get_job_list():
    with open('/Users/xuchaosheng/Workspace/KNX/scrapy/main_jobs.txt', 'r') as f:
        return f.readlines()


def scrap_ip_list():
    ip_scrapy_headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'en,zh-CN;q=0.9,zh;q=0.8,en-US;q=0.7',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive',
        'Host': 'www.xicidaili.com',
        'Pragma': 'no-cache',
        'Referer': 'http://www.xicidaili.com/nn/',
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }

    url = 'http://www.xicidaili.com/nn/'

    ips_list = []

    for i in range(1, 5):
        r = requests.get(url + str(i), headers = ip_scrapy_headers)
        ips_list += re.findall(re.compile('\d+\.\d+\.\d+\.\d+'), r.text)

    return ips_list


"""
item = {
            'url': 职位爬取页面地址,
            'edu': 学历要求,分成大专、本科、研究生、硕士、博士,
            'exp': 经验要求,
            'name': 职位名称,
            'date': 职位发布日期,
            'lang': 语言要求，主要是看是否对英语有要求，如果是比如普通话标准之类的也先保存在这里,
            'place': 办公具体地址，方便抓就抓不方便就空着,
            'major': 专业要求,
            'count': 招聘数量,
            'salary': 薪资数据，用数组表示，比如[3000,5000]表示月薪3000到5000,[7000]表示月薪7000,
            'toSchool': 是否是面向学校招聘的，如果是一般招聘就是False,
            'welfare': 福利标签，比如周末双休、绩效考核、员工旅游，一般就是一系列的标签，把它们保存成数组,
            'funType': 职能类型。51上是有的，其他平台不知道，如果没有就保存为空,
            'company': 公司名称,
            'location': 城市,
            'keywords': 关键词，包括代码里的搜索关键词，也包括职位提供方认为的职位关键词如果有的话。这是一个长度至少为1的数组,
            'platform': 平台名称,
            'description': 职位描述,
            'stime': 职位爬取日期。datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
            'salary2': 薪资的原始表示，先备份一个
        }
"""
